/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package pessoas.collection;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import pessoas.interfaces.IObservadorContatosInvalidos;
import pessoas.log.ConfiguracoesLog;
import pessoas.model.Contato;
import pessoas.serializacao.serializacaoArquivo;

/**
 *
 * @author Bush
 */
public class ContatosInvalidos {
    private ArrayList<Contato> contatosInvalidos;
    private serializacaoArquivo serializacao;
    private static ContatosInvalidos instancia;
    private ArrayList<IObservadorContatosInvalidos> observadores;

    private ContatosInvalidos() throws FileNotFoundException {  
        serializacao = new serializacaoArquivo();      
        contatosInvalidos = serializacao.carregaContatoInvalido();   
        observadores = new ArrayList<IObservadorContatosInvalidos>();
        
    }
    
    public static ContatosInvalidos getInstancia() throws FileNotFoundException{
        if(instancia == null){
            instancia = new ContatosInvalidos();
        }
        return instancia;
    }    
     
    public void salvarContato(Contato c) throws IOException, Exception {
        Contatos.getInstancia().salvarContato(c);
        removerContatoInvalido(c);
        notificar();
    }
    
    public void removerContatoInvalido(Contato c) throws Exception{
        for (int i = 0; i < contatosInvalidos.size(); i++) {
            if(contatosInvalidos.get(i).getNome().equals(c.getNome())&& contatosInvalidos.get(i).getTelefone().equals(c.getTelefone())){
                contatosInvalidos.remove(i);
            }
        }
        serializacao.limpaGravaContatoInvalido(contatosInvalidos);
    }
    
    public ArrayList<Contato> getContatosInvalidos() {
        return contatosInvalidos;
    }
    
//------------------------------Padrão Observer--------------------------------------
    
    public void cadastrarObservador(IObservadorContatosInvalidos observador){
        observadores.add(observador);
    }
    
    public void removerObservador(IObservadorContatosInvalidos observador){
        observadores.remove(observador);
    }
    
    public void notificar() throws FileNotFoundException{
        for(int i=0; i<observadores.size(); i++){
            observadores.get(i).atualizar(getInstancia());
        }
    }

}
